package com.canaan.business.service.basic.impl;

import java.util.Date;
import java.util.List;

import cn.hutool.core.collection.CollectionUtil;
import com.canaan.common.exception.ServiceException;
import com.canaan.common.utils.DateUtils;
import com.canaan.common.utils.SecurityUtils;
import com.canaan.common.utils.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import com.canaan.business.mapper.basic.StorehouseLocationPlatMapper;
import com.canaan.business.domain.basic.StorehouseLocationPlat;
import com.canaan.business.service.basic.IStorehouseLocationPlatService;

/**
 * 库位绘制地图信息Service业务层处理
 *
 * @author 
 * @date 2023-08-04
 */
@Service
public class StorehouseLocationPlatServiceImpl implements IStorehouseLocationPlatService {
    @Resource
    private StorehouseLocationPlatMapper storehouseLocationPlatMapper;

    /**
     * 查询库位绘制地图信息
     *
     * @param id 库位绘制地图信息主键
     * @return 库位绘制地图信息
     */
    @Override
    public StorehouseLocationPlat selectStorehouseLocationPlatById(Long id) {
        return storehouseLocationPlatMapper.selectStorehouseLocationPlatById(id);
    }

    /**
     * 查询库位绘制地图信息列表
     *
     * @param storehouseLocationPlat 库位绘制地图信息
     * @return 库位绘制地图信息
     */
    @Override
    public List<StorehouseLocationPlat> selectStorehouseLocationPlatList(StorehouseLocationPlat storehouseLocationPlat) {
        return storehouseLocationPlatMapper.selectStorehouseLocationPlatList(storehouseLocationPlat);
    }


    /**
     * 新增库位绘制地图信息
     *
     * @param storehouseLocationPlat 库位绘制地图信息
     * @return 结果
     */
    @Override
    public int insertStorehouseLocationPlat(StorehouseLocationPlat storehouseLocationPlat) {
        StorehouseLocationPlat palt = this.getInfoByStorehouseLocationNo(storehouseLocationPlat.getStorehouseLocationNo());
        if (palt!=null){
            throw new ServiceException("该库位属性已存在");
        }
        storehouseLocationPlat.setCreateBy(SecurityUtils.getUsername());
        storehouseLocationPlat.setCreateTime(DateUtils.getNowDate());
        return storehouseLocationPlatMapper.insertStorehouseLocationPlat(storehouseLocationPlat);
    }

    /**
     * 批量新增库位绘制地图信息
     *
     * @param storehouseLocationPlatList 库位绘制地图信息列表
     * @return 结果
     */
    @Override
    public int batchInsertStorehouseLocationPlat(List<StorehouseLocationPlat> storehouseLocationPlatList) {
        String username = SecurityUtils.getUsername();
        Date currerTime = DateUtils.getNowDate();
        for (StorehouseLocationPlat storehouseLocationPlat : storehouseLocationPlatList){
            storehouseLocationPlat.setCreateBy(username);
            storehouseLocationPlat.setCreateTime(currerTime);
        }
        int insertNum = 0;
        for (int i=0; i<storehouseLocationPlatList.size();) {
            int endIndex = i+500;
            if (endIndex > storehouseLocationPlatList.size()) {
                endIndex = storehouseLocationPlatList.size();
            }
            insertNum = insertNum + storehouseLocationPlatMapper.batchInsertStorehouseLocationPlat(storehouseLocationPlatList.subList(i, endIndex));
            i = endIndex;
        }
        return insertNum;
    }

    /**
     * 修改库位绘制地图信息
     *
     * @param storehouseLocationPlat 库位绘制地图信息
     * @return 结果
     */
    @Override
    public int updateStorehouseLocationPlat(StorehouseLocationPlat storehouseLocationPlat) {
        storehouseLocationPlat.setUpdateBy(SecurityUtils.getUsername());
        storehouseLocationPlat.setUpdateTime(DateUtils.getNowDate());
        return storehouseLocationPlatMapper.updateStorehouseLocationPlat(storehouseLocationPlat);
    }

    /**
     * 批量修改库位绘制地图信息
     *
     * @param storehouseLocationPlatList 库位绘制地图信息列表
     * @return 结果
     */
    @Override
    public int batchUpdateStorehouseLocationPlat(List<StorehouseLocationPlat> storehouseLocationPlatList) {
        String username = SecurityUtils.getUsername();
        Date currerTime = DateUtils.getNowDate();
        for (StorehouseLocationPlat storehouseLocationPlat : storehouseLocationPlatList){
            storehouseLocationPlat.setUpdateBy(username);
            storehouseLocationPlat.setUpdateTime(currerTime);
        }
        int updateNum = 0;
        for (int i=0; i<storehouseLocationPlatList.size();) {
            int endIndex = i+500;
            if (endIndex > storehouseLocationPlatList.size()) {
                endIndex = storehouseLocationPlatList.size();
            }
            updateNum = updateNum + storehouseLocationPlatMapper.batchUpdateStorehouseLocationPlat(storehouseLocationPlatList.subList(i, endIndex));
            i = endIndex;
        }
        return updateNum;
    }

    /**
     * 批量删除库位绘制地图信息
     *
     * @param ids 需要删除的库位绘制地图信息主键集合
     * @return 结果
     */
    @Override
    public int deleteStorehouseLocationPlatByIds(Long[] ids) {
        return storehouseLocationPlatMapper.deleteStorehouseLocationPlatByIds(ids);
    }

    /**
     * 删除库位绘制地图信息信息
     *
     * @param id 库位绘制地图信息主键
     * @return 结果
     */
    @Override
    public int deleteStorehouseLocationPlatById(Long id) {
        return storehouseLocationPlatMapper.deleteStorehouseLocationPlatById(id);
    }

    /**
     * @Description 根据库位编号获取库位属性
     * @author canaan
     * @date 2023年08月07日 13:37:42
     * @param storehouseLocationNo
     * @return
     */
    @Override
    public StorehouseLocationPlat getInfoByStorehouseLocationNo(String storehouseLocationNo) {
        StorehouseLocationPlat plat = new StorehouseLocationPlat();
        plat.setStorehouseLocationNo(storehouseLocationNo);
        List<StorehouseLocationPlat> platList = this.storehouseLocationPlatMapper.selectStorehouseLocationPlatList(plat);
        if (CollectionUtil.isNotEmpty(platList)){
            return platList.get(0);
        }
        return null;
    }

    @Override
    public boolean uploadStoreHouseLocation(String storeHouseLocationNo, String url) {
        if (StringUtils.isNotEmpty(storeHouseLocationNo)){
           StorehouseLocationPlat plat = this.getInfoByStorehouseLocationNo(storeHouseLocationNo);
           if (plat!=null){
               plat.setPlatImg(url);
               this.storehouseLocationPlatMapper.updateStorehouseLocationPlat(plat);
               return true;
           }
        }
        return false;
    }

}
